/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.ufc.quixada.service;

import br.com.ufc.quixada.dao.FilmesDAO;
import br.com.ufc.quixada.entidades.Filmes;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 * Classe responsavel por conter toda a logica de negocio
 * referente a filmes.
 * Para acesso a base de dados para persistencia das
 * informacoes do filme, ela faz uso da classe FilmesDAO.
 * @author AndreFreire
 *
 */
public class FilmeService {

    private FilmesDAO filmeDAO;

    public FilmeService() throws ClassNotFoundException {
        filmeDAO = new FilmesDAO();
    }
    /**
     * Metodo que retorna a lista de todos os filmes cadastrados
     * @return ArrayList<Filmes> - um ArrayList de objetos Filme
     */
    public ArrayList<Filmes> listFilmes() {
        ArrayList<Filmes> filmes = new ArrayList<Filmes>();
        try {
            //chama o metodo do alunoDAO
            filmes = filmeDAO.listaFilme();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return filmes;
    }

    /**
     * Metodo utilizado para adicionar um filme a base de dados
     * cadastro do filmes
     * @return boolean - true se o filme for adicionado com sucesso e false caso contrario
     * @param filme - objeto Filmes a ser armazenado
     */
    public boolean addFilme(Filmes filme) {
        try {
            filmeDAO.inserirFilme(filme);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * Metodo Utilizado para remover um filme da base de dados
     * @return boolean - true se o filme for removido com sucesso e false caso contrario
     * @param filme - objeto Filme a ser removido
     */
    public boolean deleteFilme(Filmes filme) {
        try {
            filmeDAO.deleteFilme(filme);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * Metodo utilizado para atualizar os dados do filme na base de dados.
     * @return boolean - true se o filme for atualizado com sucesso e false caso contrario
     * @param filme - objeto Filme a ser atualizado
     */
    public boolean updateFilme(Filmes filme) {
        try {
            filmeDAO.updateFilme(filme);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * Metodo utilizado para buscar um filme pelo codigo
     * @param codigo - Codigo do filme
     * @return filme - objeto Filme referente ao Codigo passada ou null
     * caso nao exista
     */
    public Filmes filmefindByCodigo(long codigo) {
        Filmes filme = null;
        try {
            filme = filmeDAO.findByCodigo(codigo);
            return filme;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * Metodo utilizado para buscar uma lista de filme pelo genero
     * @param genero - Genero do filme
     * @return ArrayList<Filmes> - um ArrayList de objetos Filme de mesmo genero
     */
    public ArrayList<Filmes> filmefindByGenero(String genero) {
        ArrayList<Filmes> filmes = null;
        try {
            filmes = filmeDAO.findByGenero(genero);
            return filmes;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    /**
     * Metodo utilizado para buscar uma lista de filme que possuam exemplares em DVD
     * @return ArrayList<Filmes> - um ArrayList de objetos Filme de mesmo midia
     */
    public ArrayList<Filmes> filmefindByDVD() {
        ArrayList<Filmes> filmes = null;
        try {
            filmes = filmeDAO.findByMidia("DVD");
            return filmes;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    /**
     * Metodo utilizado para buscar uma lista de filme pelo genero
     * @param genero - Genero do filme
     * @return ArrayList<Filmes> - um ArrayList de objetos Filme de mesmo genero
     */
    public ArrayList<Filmes> filmefindByBluRay() {
        ArrayList<Filmes> filmes = null;
        try {
            filmes = filmeDAO.findByMidia("BluRay");
            return filmes;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    
}
